/*******************************************************************************
 * Copyright (c) 2008, 2014 IBM Corp.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution. 
 *
 * The Eclipse Public License is available at 
 *    http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 *   http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *    Ian Craggs - initial API and implementation and/or initial documentation
 *******************************************************************************/

package org.eclipse.paho.mqttsn.gateway.messages;

import org.eclipse.paho.mqttsn.gateway.client.ClientInterface;
import org.eclipse.paho.mqttsn.gateway.messages.control.ControlMessage;
import org.eclipse.paho.mqttsn.gateway.messages.mqtt.MqttMessage;
import org.eclipse.paho.mqttsn.gateway.messages.mqtts.MqttsMessage;
import org.eclipse.paho.mqttsn.gateway.utils.Address;


/**
 * This object represents an "internal" message that "wraps" a Mqtts, a Mqtt
 * or a Control message.It is generated by the BroketInterface, any ClientInterface, the TimerService
 * and the MsgHandler (GatewayMsgHandler or ClientMsgHandler) and then is added in Dispatcher's queue.
 * In the case of Mqtts message carries also the client interface in which
 * MsgHandler will respond in the future.In all cases carries the Address field in order to 
 * uniquely identify the ClientMsgHandler or GatewayMsgHandler.If this filed does not exist,
 * the encapsulated message (Mqtts, Mqtt or Control) is addressed to all MsgHandlers.
 * 
 * @see org.eclipse.paho.mqttsn.gateway.core.Dispatcher
 * @see org.eclipse.paho.mqttsn.gateway.core.MsgHandler
 * @see org.eclipse.paho.mqttsn.gateway.core.ClientMsgHandler
 * @see org.eclipse.paho.mqttsn.gateway.core.GatewayMsgHandler
 *  
 *
 */
public class Message {

	public static final int MQTTS_MSG = 1;
	public static final int MQTT_MSG = 2;
	public static final int CONTROL_MSG = 3;


	private final Address address;
	private int type;

	private MqttsMessage mqttsMessage = null;
	private MqttMessage mqttMessage = null;
	private ControlMessage controlMessage = null;

	private ClientInterface clientInterface = null; 


	public Message(Address address) {
		this.address = address;
	}

	public Address getAddress() {
		return address;
	}

	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public MqttsMessage getMqttsMessage() {
		return mqttsMessage;
	}

	public void setMqttsMessage(MqttsMessage mqttsMessage) {
		this.mqttsMessage = mqttsMessage;
	}

	public MqttMessage getMqttMessage() {
		return mqttMessage;
	}

	public void setMqttMessage(MqttMessage mqttMessage) {
		this.mqttMessage = mqttMessage;
	}

	public ControlMessage getControlMessage() {
		return controlMessage;
	}

	public void setControlMessage(ControlMessage controlMessage) {
		this.controlMessage = controlMessage;
	}

	public ClientInterface getClientInterface() {
		return clientInterface;
	}

	public void setClientInterface(ClientInterface clientInterface) {
		this.clientInterface = clientInterface;
	};	
}